package agent.behaviour;

import jade.core.AID;
import jade.core.behaviours.SimpleBehaviour;
import jade.lang.acl.ACLMessage;
import util.Constant;
import agent.communication.AgentsCommunicationMsg;
import agent.model.AbstractAgent;

/**
 * SimpleBehaviour servant à envoyer des résumés à l'AgentRoyaume.
 * @author Jean-François Augé & Guillaume Poças
 */
public class ReportBehaviour extends SimpleBehaviour {

	private static final long serialVersionUID = 1L;

	private AbstractAgent agent;

	/**
	 * Constructeur.
	 * @param a, l'agent au quel est attaché le Behaviour.
	 */
	public ReportBehaviour(AbstractAgent a) {
		super(a);
		agent = a;
	}

	/**
	 * Envoi périodiquement un résumé à l'AgentRoyaume.
	 */
	@Override
	public void action() {
		block(Constant.defaultTempsCycleInfo);

		String cmd = "";
		ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
		msg.addReceiver(new AID(agent.getRoyaume().getLocalName(), AID.ISLOCALNAME));
		// nom, cycle, satisfaction, argent, prix, stock consomme, stock produit
		cmd = AgentsCommunicationMsg.INFORM.makeCommand(agent.getLocalName(),
				String.valueOf(agent.getCycle()),
				String.valueOf(agent.getSatisfaction()),
				String.valueOf(agent.getSatisfactionTotal()/agent.getCycle()),
				String.valueOf(agent.getArgent()),
				String.valueOf(agent.getPrixProduit()),
				String.valueOf(agent.getStockConsommationCourant()),
				String.valueOf(agent.getStockProductionCourant()));
		msg.setContent(cmd);
		agent.send(msg);
		
		/*double[] args = new double[7];
		args[0] = agent.getCycle();
		args[1] = agent.getSatisfaction();
		args[2] = agent.getSatisfactionTotal()/agent.getCycle();
		args[3] = agent.getArgent();
		args[4] = agent.getPrixProduit();
		args[5] = agent.getStockConsommationCourant();
		args[6] = agent.getStockProductionCourant();
		agent.getRoyaume().getMap().put(agent.getLocalName(), args);*/
		//if(Constant.DEBUG_AGENT == TypeAgent.Bijoutier) System.err.println(agent.getLocalName()+" > "+agent.getRoyaume().getLocalName()+" : "+cmd);
	}

	/** 
	 * Test la condition d'arrêt du comportement, ici la mort de l'agent.
	 * @return true si l'agent n'existe plus
	 */
	@Override
	public boolean done() {
		if(agent.isMort()) return true;
		return false;
	}

}
